草庐IT

Java OutOfMemoryError 奇怪的行为

全部标签

c++ - 更改程序中的访问说明符是否会改变程序的行为?

我想知道在C++程序中是否存在更改代码中的访问说明符(公共(public)/protected/私有(private))会导致该程序行为发生变化的情况? 最佳答案 模板允许您根据成员或方法是否可访问来执行不同的操作。作为一个随机示例,请考虑以下内容:#include#includestructfoo_private{private:foo_private(){}};structfoo_public{public:foo_public(){}};intmain(){std::cout::value;std::cout::value;}

c++ - 引用传递行为及其范围

在下面的代码中,变量a通过引用传递给构造函数,由参数x接收。然后x作为对属性的引用传递。然后用值3初始化该属性。程序在运行时输出值3。我的问题程序不应该崩溃或显示2因为在构造函数被调用之后x应该超出范围并被释放,它的地址应该被释放。并试图写入它应该会导致内存访问冲突。然而在这种情况下,x仍然在程序控制下,保存着'a'的地址这是有效的C++行为还是我遗漏了什么?#include#includeusingnamespacestd;classmyclass{public:int&attribute;myclass(int&x):attribute(x){}voidfunc(){attribu

c++ - constexpr 和未定义的行为

此代码在GCC8中编译,但在GCC7和clang中均不编译。constexprinta=1;constexprintb=--const_cast(a);这显然是UB。我的问题:标准语对评估包含UB的constexpr怎么说-这段代码是否应该编译? 最佳答案 GCC8错误constexpr编译时表达式中的所有未定义行为使得表达式在编译时不被评估(基本上不是consteval,使用基本上具有该含义的新关键字).初始化constexpr实际上需要一个consteval表达式。如果您所做的是UB(我相信是),我不会说明,但如果它是UB,那么

c++ - 哪个编译器对于以下重载/特化行为是正确的?

考虑以下代码:#includenamespaceFoo{templatevoidfoo(T*,int){puts("T");}templatestructfoo_fun{staticvoidfun(){foo((T*)0,0);};};}namespaceFoo{voidfoo(int*,int){puts("int");}}usingnamespaceFoo;intmain(){foo_funfun;fun.fun();}预期的输出是什么?“T”还是整数?一个编译器(Apple的Xcode3.1.2中的gcc4.0.1)输出“int”,另外两个编译器(gcc4.1.2和4.1.3)输

c++ - lambda:应该通过引用捕获 const 引用产生未定义的行为吗?

我刚刚在我的代码中发现了一个讨厌的错误,因为我通过引用捕获了对字符串的const引用。当lambda运行时,原始字符串对象早已不复存在,引用的值是空的,而目的是它将包含原始字符串的值,因此出现错误。让我感到困惑的是,这并没有在运行时引发崩溃:毕竟,这不应该是未定义的行为,因为afaik有一个悬空引用吗?此外,在调试器下查看id时,它看起来甚至不像垃圾,而是像一个正确构造的空字符串。这是测试用例;这只是打印一个空行:typedefstd::vector>functions;voidAddFunction(conststd::string&id,functions&funs){funs.p

c++ - weak_ptr 奇怪的复制构造函数

以下是weak_ptr的2个构造函数:http://msdn.microsoft.com/en-us/library/bb982126.aspxweak_ptr(constweak_ptr&);templateweak_ptr(constweak_ptr&);实际代码(来自内存):weak_ptr(constweak_ptr&_Other){//constructweak_ptrobjectforresourcepointedtoby_Otherthis->_Resetw(_Other);}templateweak_ptr(constweak_ptr&_Other,typenameen

C++ eigen3 线性代数库,奇怪的性能结果

我在C++中使用eigen3线性代数库有一段时间了,而且我一直试图利用向量化的性能优势。今天,我决定测试矢量化到底能在多大程度上加快我的程序速度。因此,我编写了以下测试程序:---特征测试.cpp---#includeusingnamespaceEigen;#includeintmain(){Matrix4daccumulator=Matrix4d::Zero();Matrix4drandMat=Matrix4d::Random();Matrix4dconstMat=Matrix4d::Constant(2);for(inti=0;i然后我在用不同的编译器选项编译后运行这个程序:(结果

c++ - 在 C++ 中将 64 位值左移 64 位给出奇怪的结果

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:64bitshiftproblem我在Windows864位上使用VisualStudio2012,在Debug模式下以x64为目标,使用AMDPhenomII。所以基本上...uint64_tFoo=0xFFFFFFFFFFFFFFFF使用较低的值(例如63)可恢复正常行为。为什么会发生这种情况,我该如何解决?更新:我切换到Release模式。你瞧,问题消失了,并且都返回了0。但是问题仍然处于Debug模式,这是我需要进入的位置才能调试我的代码。

c++ - 默认复制构造函数和复制赋值赋值运算符给出奇怪的错误

我已经默认了我的复制构造函数和复制赋值运算符如下:Config(constConfig&config)=default;Config&operator=(constConfig&rhs)=default;然后通过友元将这些功能授予独立功能。创建配置对象的拷贝后,我收到以下警告和注释(?):./cfg/config.hpp:129:3:warning:unusedparameter'config'[-Wunused-parameter]cfg/get.cpp:Infunction'constcfg::Config&cfg::Get(bool)':cfg/get.cpp:34:30:not

c++ - 在其成员函数返回之前删除对象是未定义的行为吗?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:C++:Deletethis?我正在尝试创建一个系统来管理游戏的状态。我当前设计的问题是,当我切换状态时,旧状态会在控制切换到新状态之前被删除。以下是我的代码的简化版本:classStateManager;classState{public:virtualvoidupdate(StateManager&manager)=0;virtual~State(){}};classStateManager{public:voidsetState(std::unique_ptr&&newState){currentSta